/*
 * 文件名：C503StringUtils.java
 * 版权： 航天恒星科技有限公司
 * 描述：符串操作相关工具
 * 修改时间：2015年6月4日
 * 修改内容：〈修改内容〉
 */
package com.zmkm.project.dbserver.utils;

import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.zmkm.project.dbserver.constant.CommonContant;
import com.zmkm.project.dbserver.constant.NumberContant;

/**
 * 〈一句话功能简述〉字符串操作相关方法 〈功能详细描述〉
 * 
 * @author chenl
 * @version [版本号, 2015年6月24日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class StringUtils extends org.apache.commons.lang3.StringUtils {
    /**
     * 〈一句话功能简述〉获得32位无符号UUID 〈功能详细描述〉
     * 
     * @return String UUID数组
     * @see [类、类#方法、类#成员]
     */
    public static String createUUID() {
        String s = UUID.randomUUID().toString();
        // 去掉"-"符号
        return s.replaceAll(CommonContant.SYSTEM_CONTANT_MIDDLE_LINE, "");
    }
    
    /**
     * 
     * 〈一句话功能简述〉
     * 〈功能详细描述〉字符串中是否都为数字
     * 
     * @param strNum
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static boolean isDigit(String strNum) {
        Pattern pattern = Pattern.compile("[0-9]{1,}");
        Matcher matcher = pattern.matcher((CharSequence) strNum);
        return matcher.matches();
    }
    
    /**
     * 
     * 〈一句话功能简述〉将一个字节数组转换为16进制的字符串 〈功能详细描述〉
     * 
     * @param arrB 字节数组
     * @return 转换后的字符串
     * @throws Exception Java运行时异常
     * @see [类、类#方法、类#成员]
     */
    public static String byteArr2HexStr(byte[] arrB)
        throws Exception {
        int iLen = arrB.length;
        // 每个byte用两个字符才能表示，所以字符串的长度是数组长度的两倍
        StringBuffer sb = new StringBuffer(iLen * NumberContant.TWO);
        try {
            for (int i = 0; i < iLen; i++) {
                int intTmp = arrB[i];
                // 把负数转换为正数
                while (intTmp < 0) {
                    intTmp = intTmp + NumberContant.TWO_FIVE_SIX;
                }
                // 小于0F的数需要在前面补0
                if (intTmp < NumberContant.SIXTEEN) {
                    sb.append("0");
                }
                sb.append(Integer.toString(intTmp, NumberContant.SIXTEEN));
            }
        }
        catch (Exception ex) {
            return null;
        }
        return sb.toString();
    }
    
    /**
     * 将16进制字符串转为byte数组
     * 
     * @exception java 运行异常
     * @param strIn 字符串
     * @return byte[]
     */
    public static byte[] hexStr2ByteArr(String strIn)
        throws Exception {
        byte[] arrOut = null;
        try {
            byte[] arrB = strIn.getBytes();
            int iLen = arrB.length;
            
            // 两个字符表示一个字节，所以字节数组长度是字符串长度除以2
            arrOut = new byte[iLen / 2];
            for (int i = 0; i < iLen; i = i + 2) {
                String strTmp = new String(arrB, i, 2);
                arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
            }
        }
        catch (Exception ex) {
            return null;
        }
        return arrOut;
    }
    
    /**
     * 〈一句话功能简述〉将字符串数组转为字符串
     * 〈功能详细描述〉
     * 
     * @param arr 字符串数组，例如：arr=new String[]{"1","2","3"}
     * @param splitChar 分隔符，例如：逗号
     * @return 指定分隔符的字符串，例："1,2,3,"
     * @see [类、类#方法、类#成员]
     */
    public static String arrayToStr(String[] arr, String splitChar) {
        int len = arr.length;
        StringBuffer str = new StringBuffer();
        // 将数组转为字符串
        for (int i = 0; i < len; i++) {
            if (isNotEmpty(arr[i])) {
                str.append(arr[i]);
                str.append(splitChar);
            }
        }
        return str.toString();
    }
    
    /**
     * 
     * 〈一句话功能简述〉
     * 〈功能详细描述〉字符串切割工具
     * 
     * @param resourceParamId 资源参数id
     * @return 资源id
     * @see [类、类#方法、类#成员]
     */
    public static String getResIdFromResParamId(String resourceParamId) {
        return resourceParamId.substring(NumberContant.ZERO,
            resourceParamId.length() - NumberContant.THREE);
    }
  
}
